<?php

namespace Maestros\Controller\Service;

use Zend\Db\Adapter\Adapter;
use Componentes\Controller\UtilsArrayController;
use Maestros\Model\Entity\Aula;
use Maestros\Controller\Service\GenericService;
use Maestros\Model\Dao\AulaDAO;
use Maestros\Controller\Service\TipoAulaService;

//SERVICIO
class AulaService extends GenericService {

    /**
     * @var Zend\Db\Adapter\Adapter 
     */
    private $dbAdapter;
    private static $aulaService;

    /**
     * @param \Zend\Db\Adapter\Adapter $dbAdapter
     */
    private function __construct(Adapter $dbAdapter) {
        $this->dbAdapter = $dbAdapter;
    }

    public static function getInstance($adapter) {
        if (self::$aulaService == null) {
            self::$aulaService = new AulaService($adapter);
        }
        return self::$aulaService;
    }

    public function getAulaDao() {
        return AulaDAO::getInstance($this->dbAdapter);
    }

    /**
     * @param type $id
     * @return type Array
     */
    public function getRegistro($id) {
        $data = null;
        $success = false;
        $mensaje = 'AULA NO ENCONTRADO';
        $aula = $this->obtenerAulaSegunId($id);
        if ($aula->getId() != null) {
            $data[0] = $aula->objectToArray();
            $mensaje = 'AULA ENCONTRADO';
            $success = true;
        }
        $output = array(
            'success' => $success,
            'data' => $data,
            'total' => count($data),
            'mensaje' => $mensaje
        );
        return $output;
        //return UtilsArrayController::organizarOutput($success, $data, null);
    }


    /**
     * @param type Aula
     * @return type Array
     */
    public function armarRegistroCompleto($aula) {
        $mensaje = 'AULA NO REGISTRADO';
        $data = null;
        $success = false;
        $servicioTipoAula = TipoAulaService::getInstance($this->dbAdapter);
        $tipoAula = $servicioTipoAula->getRegistro($aula->getTipoAula());
        if ($aula->getId() != null){
            $success = true;
            $data[0] = $aula->objectToArray();            
            $data[0]['_tipo_aula'] = $tipoAula['data'][0];
            $mensaje = 'AULA ENCONTRADO';
        }
        $output = array(
            'success' => $success,
            'data' => $data,
            'total' => count($data),
            'mensaje' => $mensaje
        );
        return $output;
    }

    /**
     * @param type Id
     * @return type array
     */
    public function getRegistroCompleto($id) {
        $aula = $this->obtenerAulaSegunId($id);
        return $this->armarRegistroCompleto($aula);
    }

    /**
     * @param type Id
     * @return type array
     */
    public function getRegistroCompletoSegunCodigoExterno($codigoExterno){
        $aula = $this->obtenerAulaSegunCodigoExterno($codigoExterno);
        return $this->armarRegistroCompleto($aula);
    }

    /**
     * @param type Id
     * @return type Objet
     */
    public function obtenerAulaSegunId($id) {
        $registros = $this->getAulaDao()->getRegistro($id);
        $data = UtilsArrayController::llenarData($registros);
        $aula = new Aula($data[0]);
        $aula->setCodigoExterno($data[0]['codigo_externo']);
        $aula->setDescricion($data[0]['descripcion']);
        $aula->setCapacidad($data[0]['capacidad']);
        $aula->setTipoAula($data[0]['id_tipo_aula']);
        return $aula;
    }

    /**
     * @param type Id
     * @return type Objet
     */
    public function obtenerAulaSegunCodigoExterno($codigoExterno) {
        $registros = $this->getAulaDao()->getAulaSegunCodigoExterno($codigoExterno);
        $data = UtilsArrayController::llenarData($registros);
        $aula = new Aula($data[0]);
        $aula->setCodigoExterno($data[0]['codigo_externo']);
        $aula->setDescricion($data[0]['descripcion']);
        $aula->setCapacidad($data[0]['capacidad']);
        $aula->setTipoAula($data[0]['id_tipo_aula']);
        return $aula;
    }
}